// 题目要求：
// 给定两个字符串 A 和 B，如果能通过旋转 A 得到 B，返回 true，否则返回 false
// 例如：youzan -> zanyou，返回 true
// youzan 不能通过旋转得到 zyouan，返回 false

// 解题思路：
// 先判断 A 和 B 的长度是否相同，如果不相同，直接返回 false
// 可以将 A 拼接到 A 本身的后面，就得到 AA
// 如果 AA 包含 B，返回 true，否则返回 false

public class RotateString {
    // 解法 1 - 直接调用接口
    public boolean solve1(String A, String B){
        if(A.length() != B.length()) return false;
        return (A + A).contains(B);
    }
    // 解法 2 - 截子串
    public boolean solve2 (String A, String B) {
        int n1 = A.length();
        int n2 = B.length();

        if(n1 != n2) return false;

        String AA = A + A;

        for(int i = 0; i < n1; i++){
            String s = AA.substring(i, i + n1);
            if(s.equals(B)) return true;
        }

        return false;
    }
    // 解法 3 - 转化为字符序列
    public boolean solve3(String A, String B){
        int n1 = A.length();
        int n2 = B.length();

        if(n1 != n2) return false;

        char[] s1 = (A + A).toCharArray();
        char[] s2 = B.toCharArray();

        int i = 0;
        int j = 0;
        while(i < s1.length){
            // 找第一个相同的字符
            while(i < n1 && s1[i] != s2[0]){
                i++;
            }
            if(i == n1) return false;
            int index = i;
            // 对比后面的字符是否都相同
            for(j = 0; j < n2; j++){
                if(s1[i] != s2[j]){
                    break;
                }else{
                    i++;
                }
            }
            if(j == n2) return true;
            else i = index + 1;
        }

        return false;
    }
}
